package controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.PreparedStatement;

/**
 * @date 2025/9/25
 */

//@Controller
//如果在类上使用@RestController代替@Controller
//则表示默认会在当前类中所有方法上自动添加@ResponseBody
//即:当前类中的所有方法不再返回视图，而是直接返回数据模型
//该注解对ModelAndView不生效
@RestController
@RequestMapping("/resp")
public class ResponseController {

    @RequestMapping("/f1")
    public ModelAndView f1(){
        //当方法返回值为ModelAndView时，一般表示响应数据中包含了试图与数据模型
        ModelAndView mav = new ModelAndView();
        mav.setViewName("login");
        return mav;
    }

    //当方法的返回值是S听类型，那么其返回值格式有三种
    //1.视图名:表示直接返回视图，返回的视图名须经过viewReslover处理
    //2.forward:命令 表示通过转发跳转到指定页面
    //3.redirect:命令 表示通过重定向跳转到指定页面
    @RequestMapping("/f2")
    public String f2(){
        return "login";
    }

    @RequestMapping("/f3")
    public String f3(){
        return "forward:/showLogin";
    }

    @RequestMapping("/f4")
    public String f4(){
        return "redirect:/showLogin";
    }

    @RequestMapping("/f5")
    public void f5(){
        // 404:/WEB-INF/pages/ resp/f5 .jsp
        // /resp/f5
        //当方法无返回值，且方法的参数不包含响应对象时
        //会将当前请求名作为视图名返回了
    }

    @RequestMapping("/f6")
    public void f6(HttpServletResponse response) throws IOException {
        //当方法无返回值，且方法的参数中包含响应对象时
        //此时响应数据交给响应参数来处理
        PrintWriter out = response.getWriter();
        out.println("<h1 style='color:green;'>Hello World!</h1>");
    }

    @RequestMapping("/f7")
    public String f7(){
        return "Helo World";
    }

    @RequestMapping("/f8")
    public String f8(){
        return "<h1 style='color:red;'>Hello World!</h1>";
    }

    @RequestMapping("/f9")
    public void f9(HttpServletRequest request) throws UnsupportedEncodingException {
        request.setCharacterEncoding("utf-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("username:"+username+",password:"+password);
    }

    @RequestMapping("/f10")
    public void f10(@RequestParam("username") String username, @RequestParam("password") String password){
        //@RequestParam(key)即为request.getParameter(key)
        System.out.println("username:"+username+",password:"+password);
    }

    @RequestMapping("/f11")
    public void f11(String username,String password){
        //当方法的参数不是一个对象，且没有任何注解所标注时，默认自动添加@RequestParam注解
        //且参数key即为当前变量名
        System.out.println("username:"+username+",password:"+password);

        Connection conn = null;
        PreparedStatement ps = null;
    }
}
